List 인터페이스
✒️ 2025-05-27 16:51 내용 수정
List 인터페이스
순서가 있는 데이터 집합이고,데이터 중복을 허용한다.
- 배열과 비슷하게 index로 객체를 관리하지만 배열과 다르게 크기 제한이 없고, 삽입, 삭제, 변경이 가능하다.
- 단순히 데이터를 삽입, 삭제할 때 사용한다.
- 클래스 객체의 필드를 저장하는 List를 만들 수 있다.
- 제너릭 사용의 이점!
List<ClassName>를 사용하면 ClassName 내의 필드에도 접근할 수 있는 List 생성이 가능하다.List<ClassName>에 저장되는 건 Class 객체의 주소 정보다.
- List 컬렉션 클래스로는
ArrayList<E>,LinkedList<E>,Vector<E>,Stack<E>등이 있다.- ArrayList와 LinkedList를 많이 사용한다.
- Vector는 호환성때문에 ArrayList를 사용하는 것이 좋다.
인터페이스 메서드
| List 인터페이스 메서드 | 설명 |
|---|---|
void add(E, e) |
데이터를 순서대로 추가함 |
void add(int index, E e) |
데이터를 원하는 index 위치에 추가함 |
void set(int index, E e) |
원하는 index 위치의 값을 변경 |
boolean equals(Object o) |
리스트와 전달된 객체가 같은지 확인 |
E get(int index) |
선택된 index 위치의 값을 반환 |
void remove(int index) |
선택된 index 위치의 값을 제거 |
void clear() |
모든 데이터 제거 |
int size() |
저장된 데이터의 개수를 반환 |
boolean contains(Object o) |
데이터 존재 여부 확인 |
Object[] toArray() |
해당 리스트의 모든 요소를 Object 타입의 배열로 반환 |
boolean isEmpty() |
해당 리스트가 비었는지 확인 |
Iterator<E> iterator() |
해당 리스트의 반복자(iterator)를 반환 |
void sort(Collections.naturalOrder) |
오름차순으로 정렬. 내부 파라미터에 따라 옵션이 다르다 |
List와 Array간 변환
1) List를 Array로 변환
- for문을 사용해서 요소들을 하나씩 넣어주기
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
int[] arr = new int[2];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
stream().mapToType().toArray()나toArray(arrayType[])로 변환
List<Integer> list = new ArrayList<>();
int[] arr = list.streamintValue).toArray(;
int[] arr2 = list.toArray(new int[2]);
2) Array를 List로 변환
Arrays.asList()메서드 사용
List<T> list = Arrays.asList(array);
Arrays.stream().collect()메서드 사용
List<T> list = Arrays.stream(array).collect(Collectors.toList());
List 인터페이스 구현체(ArrayList와 LinkedList)
| 항목 | ArrayList | LinkedList |
|---|---|---|
| 기본 구조 | 동적 배열(Dynamic Array) | 이중 연결 리스트(Doubly Linked List) |
| 메모리 사용 | 연속된 메모리 공간을 사용하여 상대적으로 메모리 효율적 | 각 노드가 데이터와 포인터를 가지므로 메모리 사용량이 더 많음 |
| 인덱스 접근 속도 | 빠름 (O(1)) |
느림 (O(n)) |
| 중간 삽입/삭제 속도 | 느림 (O(n)) - 요소 이동 필요 |
빠름 (O(1) 앞쪽), 중간은 탐색 필요 (O(n)) |
| 끝에 삽입/삭제 속도 | 빠름 (O(1)), 단, 배열 크기 초과 시 재할당 필요 |
빠름 (O(1)) |
| 검색 성능 | 빠름 (O(1)) - 인덱스 기반 접근 |
느림 (O(n)) - 순차 탐색 필요 |
| 메서드 지원 | List 인터페이스 구현 |
List, Deque, Queue 인터페이스 구현 |
| 활용 예시 | 데이터 저장 및 빈번한 조회가 필요한 경우 | 데이터의 빈번한 삽입/삭제가 필요한 경우 |
| 메모리 할당 방식 | 연속된 메모리 공간에 할당 | 비연속적인 메모리 공간에 할당 |
| 사용 시 주의점 | 중간 삽입/삭제 시 성능 저하 가능성 | 인덱스 기반 접근 시 성능 저하 가능성 |
1. ArrayList
- ArryaList<E>는 배열을 이용하여 데이터를 저장한다.
- 배열과 다르게 데이터를 삽입/삭제할 때 공간이 늘거나 줄어든다.
- 요소의 중간 삽입/삭제 속도가 느리다.
- 시간 복잡도 :
O(n)
- 시간 복잡도 :
- 사용할 때는 배열과 비슷하며, 메모리 사용도 LinkedList보다 적다.
- 데이터를 출력하거나 검색할 때 인덱스 기반의 빠른 접근 속도를 가진다.
- 시간 복잡도 :
O(1)
- 시간 복잡도 :
List<T> 인스턴스이름 = new ArrayList<T>();

2. LinkedList
- LinkedList<E>는 데이터와 다음 데이터의 주소를 가지는 노드(node) 객체가 연결되어 저장된다.
- 순서가 있는 구조이지만, 배열이 아니기 때문에 index가 없어 순차 탐색이 필요하기에 검색 속도가 느리다.
- 시간 복잡도 :
O(n)
- 시간 복잡도 :
- ArrayList에 비해 추가 속도는 느리지만, ArrayList보다 매우 빠른 중간 삽입/삭제가 가능하다.
- 데이터가 들어갈 위치 전후의 노드의 연결을 변경하기 때문에 중간 삽입/삭제가 빠르다.
- 시간 복잡도 :
O(1)(앞),O(n)중간
- ArrayList처럼 List 인터페이스를 구현하므로 ArrayList 클래스와 사용할 수 있는 메서드가 거의 같다.
List<T> 인스턴스이름 = new LinkedList<T>();

Stack
Vector 클래스를 확장하여 스택의 동작을 제공하는 스택 자료 구조 클래스
Stack<T> 인스턴스이름 = new Stack<T>();
- 스택은 LIFO(Last-In-First_out) 방식으로 작동한다.
- 스레드에 안전하지 않으므로, 멀티스레드 환경에서 사용할 때 동기화에 조심해야 한다.
java.util.concurrent.ConcurrentLinkedDeque같은 자료 구조가 안전하다.
| 메서드 | 설명 |
|---|---|
push(E item) |
스택의 꼭대기에 요소를 추가 |
E pop() |
스택의 꼭대기에 있는 요소를 제거하고 반환 |
peek() |
스택의 꼭대기에 있는 요소를 반환하되, 제거하지 않음 |
boolean isEmpty() (Vector) |
스택이 비어있으면 true, 그렇지 않으면 false를 반환 |
boolean empty() (Stack) |
스택이 비어있으면 true, 그렇지 않으면 false를 반환 |
E search(Object o) |
스택에서 지정된 요소를 찾고, 해당 요소가 스택의 꼭대기로부터 얼마나 떨어져 있는지 반환 |
void clear() |
스택 비우기 |
boolean contains(Object o) |
스택에 o가 있는지 확인 |
E elementAt(int index) |
스택의 인덱스 index 위치에 있는 요소를 반환 |
E lastElement() |
스택의 마지막 위치의 요소를 반환 |
int lastIndexOf(Object o) |
스택에 o의 인덱스들 중 마지막 인덱스 반환 |
boolean remove(Object o) |
스택에 o를 제거 |
E remove(int index) |
스택의 인덱스 index 위치의 요소를 제거 |
Stream E stream() |
스택을 stream으로 변환 |
void setSize(int newSize) |
스택의 크기를 newSize로 변경 |
set(int index, T element) |
스택의 인덱스 index 위치의 요소를 element로 변환 |
sort(Comparator c) |
Comparator c 방법으로 스택을 정렬 |
Object toArray() |
스택을 Object 배열로 변환 |
String toString() |
스택을 String으로 변환 |